/*
 * Syncronizer.cpp
 *
 *  Created on: May 19, 2012
 *      Author: gonzalo
 */

#include "Syncronizer.h"
#include "../common/DTOCliente.h"

//In nanoseconds
#define SYNCRO_INTERVAL 100000

Syncronizer::Syncronizer(ColaClientes* clientes,const bool* conexionActiva,ColaMensajes* colaMensajesServer)
:conexionActiva(conexionActiva) {
	this->clientes = clientes;
	this->colaMensajesServer = colaMensajesServer;
}


bool Syncronizer::conectado() const{
	return *(this->conexionActiva);
}

void* Syncronizer::run(){

	DTOCliente* syncroRequest = new DTOCliente(SERVER_OWN,REQ_SYNCRONIZE,NULL,false);
	while(this->conectado()){

		if(this->colaMensajesServer->getSize()<150){
			std::list<DTOCliente*>* invalidClients = clientes->getInvalidClients();
			DTOCliente* clientInvalid = NULL;
			while(!invalidClients->empty()){
				clientInvalid = invalidClients->back();

				invalidClients->pop_back();

				//Remuevo el cliente de la lista del server
				clientes->removeClient(clientInvalid);

				//Propago la desconexion
				clientes->propagarDTO(clientInvalid);
			}

			clientes->propagarDTO(syncroRequest);
			delete clientInvalid;
			delete invalidClients;
		}


		usleep(SYNCRO_INTERVAL);

	}

	//Delete the dto
	delete syncroRequest;

	return NULL;
}

